/**
 * 类型定义文件
 * 定义项目中使用的所有类型接口
 */

/**
 * AI测试定义接口
 */
export interface AITestDefinition {
  /** 测试场景名称 */
  scenario: string;
  /** 自然语言测试描述 */
  prompt: string;
  /** 测试动作列表 */
  actions?: TestAction[];
  /** 基础URL */
  baseUrl?: string;
  /** 超时设置(毫秒) */
  timeout?: number;
  /** 其他自定义参数 */
  params?: Record<string, any>;
}

/**
 * 测试动作类型
 */
export type ActionType = 
  | 'navigate'   // 导航到URL
  | 'click'      // 点击元素
  | 'fill'       // 填充表单字段
  | 'select'     // 选择下拉选项
  | 'hover'      // 悬停在元素上
  | 'press'      // 按键
  | 'wait'       // 等待
  | 'assert'     // 断言
  | 'screenshot' // 截图
  | 'custom';    // 自定义动作

/**
 * 测试动作接口
 */
export interface TestAction {
  /** 动作类型 */
  type: ActionType;
  /** 选择器 (用于定位元素) */
  selector?: string;
  /** 动作值 (如填充的文本、URL等) */
  value?: string;
  /** 断言条件 */
  condition?: string;
  /** 超时设置(毫秒) */
  timeout?: number;
  /** 其他自定义参数 */
  params?: Record<string, any>;
}

/**
 * 测试断言接口
 */
export interface TestAssertion {
  /** 选择器 (用于定位元素) */
  selector?: string;
  /** 预期值 */
  expected?: string | number | boolean | null;
  /** 断言类型 */
  type?: 'equals' | 'contains' | 'exists' | 'matches' | 'custom';
  /** 自定义断言函数 */
  customCheck?: (value: any) => boolean | Promise<boolean>;
}

/**
 * YAML测试配置接口
 */
export interface YamlTestConfig {
  /** 测试列表 */
  tests: {
    /** 测试名称 */
    name: string;
    /** AI提示词 */
    ai_prompt: string;
    /** 参数 */
    params?: Record<string, any>;
    /** 断言列表 */
    assertions?: {
      /** 选择器 */
      selector: string;
      /** 预期值 */
      expected: string;
    }[];
  }[];
}

/**
 * 测试结果接口
 */
export interface TestResult {
  /** 测试ID */
  testId: string;
  /** 测试场景 */
  scenario: string;
  /** 是否成功 */
  success: boolean;
  /** 错误信息 */
  error?: string;
  /** 执行时间(毫秒) */
  duration: number;
  /** 截图路径 */
  screenshots?: string[];
  /** 详细日志 */
  logs?: string[];
  /** 其他元数据 */
  metadata?: Record<string, any>;
}